:root { --bg-page: #000000; --bg-card: #1a1a1a; --bg-stat: #2c2c2c; --border-color: #444; --text-primary: #ffffff; --text-secondary: #b3b3b3; --text-body: #dcdcdc; --font-main: 'Tajawal', sans-serif; } .lawyers-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 20px; /* زيادة المسافة بين البطاقات */ row-gap: 50px; width: 100%; margin: 144px auto 0; width: 86%; max-width: 2100px; } @MEDIA(MAX-WIDTH: 1060PX){ .lawyers-container { width: 92%; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); } } @MEDIA(MAX-WIDTH: 500PX){ .lawyers-container { width: 95%; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); } } .lawyer-card { background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: 8px; padding: 20px; padding-top: 60px; /* مساحة علوية للصورة البارزة */ position: relative; color: var(--text-primary); transition: transform 0.2s ease-in-out, border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out; } .lawyer-card:hover { /* transform: scale(1.03); */ border-color: var(--text-primary); box-shadow: 0 10px 40px rgba(255, 255, 255, 0.1); } .lawyer-card .profile-pic { width: 90px; height: 90px; border-radius: 50%; object-fit: cover; border: 4px solid var(--bg-card); /* إطار بنفس لون خلفية البطاقة */ position: absolute; top: -35px; /* نصف ارتفاع الصورة لتبدو في المنتصف */ right: 30px; transition: transform 0.2s ease-in-out; } .lawyer-card:hover .profile-pic { transform: rotate(5deg); } .lawyer-card .lawyer-name { margin: 0 0 5px; font-size: 18px; font-weight: 700; font-family: 'cairo'; display: block !important; } .lawyer-card .lawyer-title { margin: 0 0 25px; color: var(--text-secondary); font-size: 1rem; display: block; } .lawyer-card .lawyer-description { margin: 0 0 25px; color: var(--text-body); font-size: 16px; line-height: 1.7; font-family: 'zain'; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; white-space: normal; } .lawyer-card .lawyer-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 30px; text-align: right; /* محاذاة النص لليمين */ } .lawyer-card .stat-item { background-color: var(--bg-stat); padding: 15px; border-radius: 6px; } .lawyer-card .stat-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .lawyer-card .stat-header i { font-size: 1.2rem; color: var(--text-primary); } .lawyer-card .stat-header .stat-label { font-size: 0.8rem; color: var(--text-secondary); font-weight: 700; font-family: 'cairo'; } .lawyer-card .stat-value { font-size: 19px; font-weight: bold; font-family: 'zain'; color: var(--text-primary); } .lawyer-card .card-actions { display: flex; justify-content: right; gap: 15px; } .lawyer-card .btnwddw { flex-grow: 1; padding: 12px; border-radius: 5px; font-size: 0.9rem; font-weight: bold; font-family: var(--font-main); cursor: pointer; transition: all 0.2s ease; } .lawyer-card .btnwddw.btn-primary { background-color: var(--text-primary); color: var(--bg-page); max-width: 237px; border: 1px solid var(--text-primary); } .lawyer-card .btnwddw.btn-primary:hover { background-color: var(--bg-page); color: var(--text-primary); } .lawyer-card .btnwddw.btn-secondary { background-color: transparent; color: var(--text-primary); border: 1px solid var(--text-primary); } .lawyer-card .btnwddw.btn-secondary:hover { background-color: var(--text-primary); color: var(--bg-page); } جاري تحميل بيانات المحامين... × موضوع الاستشارة * نص الاستشارة * رقم القضية (إن وجد) رقم الهاتف (لإثبات الجدية) * إرسال الاستشارة body { font-family: 'Cairo', sans-serif; background-color: #f9f9f9; } .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.6); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; transition: opacity 0.3s ease; } .modal-content { direction: rtl;position: relative;background-color: rgb(17, 17, 17);color: rgb(255, 255, 255);padding: 20px 30px;border-radius: 20px;border: 1px solid rgb(58, 58, 58);box-shadow: rgba(0, 0, 0, 0.5) 0px 10px 40px;width: 90%;max-width: 600px;text-align: center;transform: scale(0.9);transition: all 0.2s ease 0s; } .modal-overlay.show { opacity: 1; } .modal-overlay.show .modal-content { transform: scale(1); } .modal-close-btn { position: absolute; top: 15px; right: auto; left: 15px !important; background: none; border: none; font-size: 28px; cursor: pointer; color: #aaa; line-height: 1; } #consultationForm .form-group { margin-bottom: 15px; } #consultationForm label { display: block; margin-bottom: 5px; font-weight: 600; color: #fff; text-align: right; font-family: 'cairo'; font-size: 15px; } #consultationForm input, #consultationForm textarea { width: 100%; padding: 12px; border: 1px solid #ffffff1c; border-radius: 8px; box-sizing: border-box; background: #191919; border-radius: 126px; font-family: 'zain'; font-size: 16px; color: #fff !important;} #consultationForm input:focus, #consultationForm textarea:focus { border-color: #007bff; outline: none; box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1); } .btn-submit { width: 55%; padding: 12px; border-radius: 23px; font-size: 1.1em; font-weight: 600; cursor: pointer; transition: background-color 0.2s; background-color: #000000; color: white; font-family: 'zain'; border: 1px solid #ffffff4a; } .btn-submit:hover { background-color: #fff; color: #000; } .btn-submit:disabled { background-color: #94d3a2; cursor: not-allowed; } import { initializeApp } from "https://www.gstatic.com/firebasejs/10.12.2/firebase-app.js"; // ✅ السطر الصحيح بعد التعديل import { getFirestore, collection, query, where, getDocs, doc, getDoc, addDoc } from "https://www.gstatic.com/firebasejs/10.12.2/firebase-firestore.js"; import { getAuth, onAuthStateChanged } from "https://www.gstatic.com/firebasejs/10.12.2/firebase-auth.js"; const firebaseConfig = { apiKey: "AIzaSyCXUgLNYwKB9_wrOONQOrD8mlO2zdp4tuc", authDomain: "derby1.firebaseapp.com", projectId: "derby1", storageBucket: "derby1.appspot.com", messagingSenderId: "839166015287", appId: "1:839166015287:web:786225f8220461ea9d0cb2" }; const app = initializeApp(firebaseConfig); const db = getFirestore(app); const auth = getAuth(app); let currentUser = null; const modal = document.getElementById('consultationModal'); const closeModalBtn = document.getElementById('closeModalBtn'); const consultationForm = document.getElementById('consultationForm'); const submitBtn = document.getElementById('submitConsultationBtn'); onAuthStateChanged(auth, (user) => { currentUser = user; }); function showModal() { modal.style.display = 'flex'; setTimeout(() => modal.classList.add('show'), 10); } function hideModal() { modal.classList.remove('show'); setTimeout(() => { modal.style.display = 'none'; consultationForm.reset(); }, 300); } closeModalBtn.addEventListener('click', hideModal); modal.addEventListener('click', (e) => { if (e.target === modal) hideModal(); }); async function fetchAndDisplayLawyers() { const container = document.getElementById('lawyers-container'); try { // ✅ --- [هذا هو السطر الذي تم تعديله] --- ✅ // أضفنا شرطًا جديدًا لجلب المحامين فقط عندما تكون قيمة حقل "wait" هي "false" const q = query(collection(db, "contactForm"), where("role", "==", "lawyer"), where("wait", "==", false)); const querySnapshot = await getDocs(q); container.innerHTML = ''; if (querySnapshot.empty) { container.innerHTML = 'لا يوجد محامون مفعلون لعرضهم حاليًا.'; return; } querySnapshot.forEach((docSnap) => { const lawyerData = docSnap.data(); const lawyerId = docSnap.id; const lawyerCard = document.createElement('div'); lawyerCard.className = 'lawyer-card'; lawyerCard.innerHTML = ` ${lawyerData.msgContent || 'اسم غير متوفر'} ${lawyerData.descriptionrw || 'وصف غير متوفر'} درجة القيد ${lawyerData.degree || 'غير محدد'} سنوات الخبرة ${lawyerData.expertise || 'غير محدد'} طلب استشارة عرض الملف الشخصي `; container.appendChild(lawyerCard); }); addEventListenersToButtons(); } catch (error) { console.error("Error fetching documents: ", error); container.innerHTML = 'حدث خطأ أثناء جلب البيانات.'; } } // ✅ الكود الجديد والمُصَحَّح function addEventListenersToButtons() { document.querySelectorAll('.request-btn').forEach(button => { button.addEventListener('click', () => { if (!currentUser) { alert("يرجى تسجيل الدخول أولاً لطلب استشارة."); return; } // عند الضغط على الزر، نقوم بتخزين بيانات المحامي في النموذج نفسه consultationForm.dataset.targetLawyerUid = button.dataset.lawyerUid; consultationForm.dataset.targetLawyerName = button.dataset.lawyerName; // { button.addEventListener('click', () => { const profileLink = button.dataset.profileLink; if (profileLink) { // إذا كان الرابط موجودًا، انتقل إليه window.location.href = profileLink; } else { // إذا كان الرابط فارغًا، أظهر الرسالة alert('هذا المحامي ينتظر التفعيل'); } }); }); // --- نهاية الكود المضاف --- } consultationForm.addEventListener('submit', async (e) => { e.preventDefault(); const targetLawyerUid = e.target.dataset.targetLawyerUid; const targetLawyerName = e.target.dataset.targetLawyerName; if (!currentUser) { alert("يرجى تسجيل الدخول أولاً لإرسال الاستشارة."); return; } // ========================================================== // ✅✅✅ تطبيق نفس منطق كود البروفايل الناجح ✅✅✅ // 1. تعريف المتغيرات بالقيم الافتراضية (من حساب جوجل) let senderName = currentUser.displayName || 'مستخدم غير معروف'; let senderPhoto = currentUser.photoURL || ''; try { // 2. جلب ملف المُرسِل من قاعدة البيانات (تمامًا مثلما يفعل كود البروفايل) const userRef = doc(db, 'contactForm', currentUser.uid); const userSnap = await getDoc(userRef); // 3. إذا وُجد الملف، نستخدم البيانات المخصصة if (userSnap.exists()) { const userData = userSnap.data(); senderName = userData.msgContent || senderName; senderPhoto = userData.photoUrlXP || senderPhoto; } submitBtn.disabled = true; submitBtn.textContent = 'جاري الإرسال...'; // 4. تجهيز بيانات الاستشارة بالبيانات الصحيحة const consultationData = { subject: document.getElementById('consultSubject').value, details: document.getElementById('consultDetails').value, caseNumber: document.getElementById('consultCaseNumber').value || '', phone: document.getElementById('consultPhone').value, status: 'pending', createdAt: new Date(), senderUid: currentUser.uid, senderName: senderName, //